// 当子类的原型对象指向父类的实例 --原型链继承
// 1.原型链继承
// Person.prototype={};//Person.prototype=new Object();
// 2.构造函数继承 经典继承 
// 3.组合继承
// 声明一个父类型构造函数  子类型构造函数继承父类型构造函数属性
function Animal(type,age,weight,length){
    // 创建对象
    // this--对象
    // 执行函数体内代码
    // 返回对象
    this.type=type;
    this.age=age;
    this.weight=weight;
    this.length=length;
};
Animal.prototype={
    constructor:Animal,
    sayType:function(){
        console.log(this.type);
    }
};//指向Object的实例
// 声明一个子类型
function Dog(type,age,weight,length,name,color){  
    //1.借用构造函数继承 经典继承 在子类型构造函数在调用父构造函数
    // golbal.Animal();
    // new Dog();//d1
    // this--d1
    Animal.call(this,type,age,weight,length);
    this.name=name;
    this.color=color;
};
// 第二种继承 原型链继承 
// 子类的原型对象指向父类的实例
Dog.prototype=new Animal();
// 将子类型实例的构造者改成子类型
Dog.prototype.constructor=Dog;
Dog.prototype.sayName=function(){
    console.log(this.name);
};
var d1=new Dog('狗',1,'10Kg','40cm','可乐','白色');
console.log(d1,'借用构造函数继承属性');
d1.sayType();//继承父类型方法
d1.sayName();
console.log(d1 instanceof Dog,'d1是Dog的实例');
console.log(d1 instanceof Animal,'d1是Animal的实例对象');
console.log(d1 instanceof Object,'d1是Object的实例对象');
console.log(new Animal() instanceof Animal,'new Animal()是Animal的实例对象');
console.log(new Animal() instanceof Object,'new Animal()是Object的实例对象');
// Dog.prototype={
// }
//JS继承
    // 1.经典继承 构造函数继承
        // 在子类构造函数内调用父构造函数
    // 2.原型链继承 
        // 子类的原型指向父类的实例
    // 3.组合继承 构造函数继承+原型链继承

